package net.yxsoft.kit;

import it.sauronsoftware.cron4j.Scheduler;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * Cron4j 工具
 * @author dufuzhong
 * 2018-03-21 22:01:28
 */
public class Cron4jKit {
    private static final Map<String, Scheduler> MAPCP
            = new ConcurrentHashMap<String, Scheduler>();
    public static void put(String name, String cron,
                           Runnable task, boolean daemon) {
        stop(name);
        Scheduler scheduler = new Scheduler();
        scheduler.schedule(cron, task);
        scheduler.setDaemon(daemon);
        MAPCP.put(name, scheduler);
        //scheduler.start();
    }

    public static void initput(String name, String cron,
                           Runnable task, boolean daemon) {
        stop(name);
        Scheduler scheduler = new Scheduler();
        scheduler.schedule(cron, task);
        scheduler.setDaemon(daemon);
        MAPCP.put(name, scheduler);
        scheduler.start();
    }
    public static Scheduler get(String name) {

        return MAPCP.get(name);
    }
    public static void remove(String name,boolean isStart) {
        Scheduler scheduler = get(name);
        if (scheduler != null) {
            if(isStart) {
                stop(name);
            }
            MAPCP.remove(name);
        }
    }
    public static void start(String name) {
        Scheduler scheduler = get(name);
        if (scheduler != null) {
            scheduler.start();
        }
    }
    public static void start() {
        for (Map.Entry<String, Scheduler> kv : MAPCP.entrySet()) {
            kv.getValue().start();
        }
    }
    public static void stop(String name) {
        Scheduler scheduler = get(name);
        if (scheduler != null) {

            scheduler.stop();
        }
    }
    public static void stop() {
        for (Map.Entry<String, Scheduler> kv : MAPCP.entrySet()) {
            kv.getValue().stop();
        }
    }
    public static void main(String[] args) {
        System.out.println("Cron4jKit: 开始装载每分钟执行一次的任务");
        /**
         * # cron 表达式由五部分组成：分 时 天 月 周
         * # 分 ：从 0 到 59
         * # 时 ：从 0 到 23
         * # 天 ：从 1 到 31，字母 L 可以表示月的最后一天
         * # 月 ：从 1 到 12，可以别名：jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov" and "dec"
         * # 周 ：从 0 到 6，0 表示周日，6 表示周六，可以使用别名： "sun", "mon", "tue", "wed", "thu", "fri" and "sat"
         * #
         * # 数字 n：表示一个具体的时间点，例如 5 * * * * 表示 5 分这个时间点时执行
         * # 逗号 , ：表示指定多个数值，例如 3,5 * * * * 表示 3 和 5 分这两个时间点执行
         * # 减号 -：表示范围，例如 1-3 * * * * 表示 1 分、2 分再到 3 分这三个时间点执行
         * # 星号 *：表示每一个时间点，例如 * * * * * 表示每分钟执行
         * # 除号 /：表示指定一个值的增加幅度。例如 n/m表示从 n 开始，每次增加 m 的时间点执行
         * # cron4j 集成cron 只有 分 时 天 月 周  没有秒
         */
     
    }

}